package com.baidu._04_TreeSet;

import java.util.Comparator;
import java.util.Objects;

public class Student implements Comparable<Student> {
    private String name;
    private int age;

    public Student() {
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }



    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        Student student = (Student) o;

        if (age != student.age) return false;
        return Objects.equals(name, student.name);
    }

    @Override
    public int hashCode() {
        int result = name != null ? name.hashCode() : 0;
        result = 31 * result + age;
        return result;
    }

    // 必须使用this和参数o进行比较，如果返回值是0，则说明this和o是相等的，在treeSet集合中，不允许在相等的元素
    // 返回的是大于0的数字，则说明this比o大，反之更小
    @Override
    public int compareTo(Student o) {
        // 按字符的年龄，从小到大排序，在这个方法中，排序规则永远用减法！最终得到一个int值即可，如果使用this，减去o,就是升序，反之就是降序
        // 除了主要的排序条件之外，建议在添加一个永远不会重复的次要排序条件即可（根据业务决定）
        int res = this.age - o.age;
        if(res == 0){
            // 说明主要条件重复了，使用次要条件，选姓名作为次要条件
            return this.name.compareTo(o.name);
        }
        return res;
    }
}
